#include "stm32f10x.h"                  // Device header

void led1(){
	//7.3.7
	//使能GPIOC的时钟
	//GPIO都是APB2的外设
	RCC->APB2ENR=0x00000010;
	
	//8.2.2
	//配置PGIOC13端口模式
	//CNF13 :00：通用推挽输出模式
	//MODE13:11：输出模式，最大速度50MH
	GPIOC->CRH=0x00300000;
	
	//8.2.4
	//配置PGIOC13端口输出
	//ODR13配置为低电平即亮灯
	GPIOC->ODR=0x00000000;
	//ODR13配置为高电平即灭灯
	//GPIOC->ODR=0x00002000;
}

/**
* 配置寄存器而不影响其它位
*
*需要将第6位置0、第7位置1，不影响其它位，就需要通过两次逻辑运算实现。
*先将第6位置0，不影响其它位：
*GPFDAT &= (~(1<<6));
*再将第7位置1，不影响其它位：
*GPFDAT |= (1<<7)
*/
void led2(){
	//7.3.7
	//使能GPIOC的时钟
	//GPIO都是APB2的外
	//RCC->APB2ENR=0x00000010; 
	//0000 0000  0000 0000  0000 0000  000[1] 0000
	//[1]改变 : 1<<4
	RCC->APB2ENR|=(1<<4);
	
	
	//8.2.2
	//配置PGIOC13端口模式
	//CNF13 :00：通用推挽输出模式
	//MODE13:11：输出模式，最大速度50MH
	//GPIOC->CRH=0x00300000;
	//0000 0000  [0011] 0000  0000 0000  0000 0000
	uint32_t temp = GPIOC->CRH;
	//[**11]改变 : 3<<20
	temp|=3<<20;
	//[00**]改变
	temp&=(~(3<<22));
	GPIOC->CRH=temp;
	
	
	//8.2.4
	//配置PGIOC13端口输出
	//ODR13配置为低电平即亮灯
	//GPIOC->ODR=0x00000000;
	//0000 0000  0011 0000  00[0]0 0000  0000 0000
	//[0]改变 : 1<<13
	GPIOC->ODR&=(~(1<<13));
	
	
	//ODR13配置为高电平即灭灯
	//GPIOC->ODR=0x00002000;
	//0000 0000  0011 0000  00[1]0 0000  0000 0000
	//[0]改变 : 1<<13
	//GPIOC->ODR|=(1<<13);
}
int main() {
	
	led2();
	
    while(1) {
		
    }
}
